package com.example.flashsales.mappers;

import com.example.flashsales.entity.dto.OrderDetailsDto;
import com.example.flashsales.entity.dto.OrderDto;
import com.example.flashsales.entity.pojo.Order;
import com.example.flashsales.entity.pojo.OrderDetails;
import com.example.flashsales.entity.vo.OrdersVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface OrderMapper {

    //增加一个订单
    int addOrder(OrderDto orderDto);

    //增加订单细节
    int addDetails(OrderDetailsDto orderDetailsDto);

    //修改订单状态
    int updateOrderState(@Param("orderId") long orderId, @Param("state") int state);

    //用户查看自己的订单
    List<Order> viewOrders(@Param("userId") long userId,@Param("page") int page,@Param("num") int num);

    //查看订单细节
    List<OrderDetails> viewOrderDetails(@Param("orderId") long id);

    //根据时间查看
    List<Order> viewOrdersByTime(@Param("qTime") Date qDate, @Param("hTime")Date hDate, @Param("userId")long userId, @Param("page")int page, @Param("num")int num);

    //查看店家的订单
    List<Order> viewStoreOrder(@Param("storeId") long storeId, @Param("page") int page, @Param("num") int num);

    //店家按时间查看订单
    List<Order> viewStoreOrderByTime(@Param("storeId") long storeId, @Param("page") int page, @Param("num") int num, @Param("qDate") Date qDate, @Param("hDate") Date hDate);

    //根据订单id获取
    Order viewOrder(@Param("storeId") long orderId);

    //根据用户id获取订单的id集合
    List<Integer> viewOrderIdByUser(@Param("userId") long userId);

    //修改订单细节
    int updateOrderDetails(@Param("orderId") long orderId, @Param("goodsId") long id, @Param("sCount") double sCount, @Param("money") double m);

    //修改订单信息
    int updateOrder(@Param("orderId") long orderId, @Param("returnMoney") double returnMoney, @Param("payMoney") double payMoney);

    //插叙会员订单总量
    Integer viewUserOrderCount(@Param("userId") long userId);

    //查看当天的订单
    List<Order> viewAllOrderByTime(@Param("d") Date d, @Param("q") Date q,@Param("page")Integer page,@Param("num") Integer num);

    // 修改订单的支付金额与支付方式
    int updateMoneyAndMethod(@Param("id") long orderId, @Param("method") int method, @Param("money") double money);

    //查看店家订单的总数
    long viewStoreOrderCount(@Param("storeId") long storeId);

    //用户按时间查看订单的总数
    Integer viewUserOrderCountByTime(@Param("userId") long userId, @Param("qDate") Date qDate, @Param("hDate") Date hDate);

    //商家按时间查看订单总数
    long viewStoreOrderCountByTime(@Param("storeId") long id, @Param("qDate") Date qDate, @Param("hDate") Date hDate);

    //查看超时订单
    List<Long>viewOrderInTimer(@Param("date") Date date);

    //删除订单
    int deleteOrder(@Param("id") Long id);

    //修改订单到达小店
    int updateOrderByArrive(@Param("orderId") long orderId, @Param("date") Date date);

    //查看所有订单
    List<Order> viewAllOrder(@Param("page") int i, @Param("num") int num);

    //查看所有订单的数量
    Integer viewAllOrderCount();

    //根据时间类型查看
    List<Order> viewAllOrderByStateAndTime(@Param("page") int i, @Param("num") int num, @Param("qDate") Date qDate, @Param("hDate") Date hDate, @Param("state") int state);

    //根据时间类型查看数量
    Integer viewCountByStateAndTime(@Param("qDate") Date qDate, @Param("hDate") Date hDate, @Param("state") int state);

    //按时间查看全部
    List<Order> viewAllByTime(@Param("page") int i, @Param("num") int num, @Param("qDate") Date qDate, @Param("hDate") Date hDate);


    //全部时间数量
    Integer viewAllTimeCount(@Param("qDate") Date qDate, @Param("hDate") Date hDate);


    //查看当天的订单重量
    List<Order> viewAllOrderByDayWeight(@Param("q")Date q,@Param("d") Date d);

    //查看所有未分拣
    List<OrderDetails> viewAllDetails(@Param("qDate") Date qDate, @Param("hDate") Date hDate, @Param("page") int i, @Param("num") Integer num);
}
